package models

import (
	"2105A/web/utils"
	"errors"
	"fmt"
	"time"

	"github.com/beego/beego/v2/client/orm"
	_ "github.com/go-sql-driver/mysql"
)

type User struct {
	Id       int       `orm:"auto"`
	Username string    `orm:"size(30)"`
	Password string    `orm:"size(32)"`
	Mobile   string    `orm:"size(11)"`
	CreateAt time.Time `orm:"datetime"`
}

type Area struct {
	Id   int    `orm:"auto"`
	Name string `orm:"size(30)"`
}

// 连接数据库
func init() {
	orm.RegisterDriver("mysql", orm.DRMySQL)                                                         // 添加Mysql驱动
	orm.RegisterDataBase("default", "mysql", "root:password@tcp(127.0.0.1:3306)/2105A?charset=utf8") // 配置连接信息
	// 需要在init中注册定义的model
	orm.RegisterModel(new(User), new(Area))

	// create table 自动创建表结构
	orm.RunSyncdb("default", false, true)
	// 开启debug 可以查看SQL语句
	orm.Debug = true
}

// 获取用户的信息
func GetUserList(username string) []User {
	o := orm.NewOrm()
	var user []User
	res, err := o.QueryTable("user").Filter("username__contains", username).All(&user)
	if err != nil {
		fmt.Println(err)
	}
	fmt.Println(res)
	fmt.Println(user)
	return user
}

// 根据用户名查询用户信息
func Login(username string) (User, error) {
	o := orm.NewOrm()
	// 根据用户名、查询信息
	var user = User{Username: username}
	err := o.Read(&user, "Username")
	if err != nil {
		return user, err
	}
	return user, nil
}

// 如果是注册、是不是向数据库添加数据
func Register(username string, password string, mobile string) error {

	o := orm.NewOrm()
	var u User
	u.Mobile = mobile
	u.Username = username
	u.Password = utils.EncryptPassword(password)
	u.CreateAt = time.Now()

	// 注册之前、需要判断手机号是否重复
	err := o.Read(&u, "mobile")
	if err != nil {
		if err != orm.ErrNoRows {
			return err
		}
	}

	if u.Id > 0 {
		return errors.New("mobile exists")
	}

	id, err := o.Insert(&u)
	if err != nil {
		fmt.Println(err)
		return err
	}
	fmt.Println(id)
	return nil
}
